package controladores;


import javax.swing.JOptionPane;

import gui.*;
import modelo.*;

public class ControladorAdmin {

	//private static ControladorAdmin ins; 
	private AdministracionGui vistaAdmin;

	
/*	
public static ControladorAdmin getIns(AdministracionGui v, MainGui vm){
	if(ins == null)
		ins = new ControladorAdmin(v);
	return ins;
	
}
	*/
	
public ControladorAdmin(AdministracionGui v ){
	
	this.vistaAdmin = v;
	vistaAdmin.setControlador(this);
	Sistema.getIns().addObserver(vistaAdmin);
	actualizarMaterias();
	actualizarAlumnos();
	actualizarProfesores();
	
}

public void salir(){
	
	vistaAdmin.dispose();

}


//Materias

public  void procesarSeleccionMateria(String num){
	Materia m = Sistema.getIns().buscarMateria(num);
	String nombre = m.getNombre();
	String numero = m.getNumero();
	vistaAdmin.mostrarAtributosMateria(numero, nombre);
	
}

public void procesarAgregarMateria(String num, String nombre){

	      Materia nueva = new Materia(num, nombre); 
	      
	      if (Sistema.getIns().existeMateria(num)){
	    	  int sel = JOptionPane.showConfirmDialog(null, "La Materia ya existe.\n Desea actualizarla ?" , "Materia Existente" , JOptionPane.OK_CANCEL_OPTION);
		    		if(sel != 0)
		    			return;  
		    		else
		    		{	
		    		if(!comprobarAsociacionesMateria(num)) return;		
		    		try {
		 
						Sistema.getIns().actualizarMateria(nueva);
						
					    } catch (Exception e) {
						mostrarMensajeErrorActualizar();
						return;
					          }
		    	  }
	      }
	      else{
	      
	    	  try {
	    		  Sistema.getIns().guardarMateria(nueva);
	  
	    	      } catch (Exception e) {
	    		  mostrarMensajeErrorGuardar();
	    		  return;
	    	            }
	        }
	      actualizarMaterias();
        }



public void procesarEliminarMateria(String num){
    Materia m = Sistema.getIns().buscarMateria(num);
    if(!comprobarAsociacionesMateria(num)) return;		
    Sistema.getIns().eliminarMateria(m);
    actualizarMaterias();
}

public void actualizarMaterias(){
	vistaAdmin.actualizarMaterias(Sistema.getIns().listarMaterias());
	
}


//Alumnos

public  void procesarSeleccionAlumno(int leg){
	Alumno a = Sistema.getIns().buscarAlumno(leg);
	int legajo = a.getLegajo();
	String nombre = a.getNombre();
	String estado = a.getEstado();
	vistaAdmin.mostrarAtributosAlumno(legajo, nombre, estado);
	
}

public void procesarAgregarAlumno(int leg, String nombre, String estado){

	      Alumno nuevo = new Alumno(leg, nombre, estado); 
	      
	      if (Sistema.getIns().existeAlumno(leg)){
	    	  int sel = JOptionPane.showConfirmDialog(null, "El Alumno ya existe.\n Desea actualizarlo ?" , "Alumno Existente" , JOptionPane.OK_CANCEL_OPTION);
		    		if(sel != 0)
		    			return;  
		    		else
		    		{	
		    		if(!comprobarAsociacionesAlumno(leg)) return;		
		    		try {
		    			
						Sistema.getIns().actualizarAlumno(nuevo);
						
					    } catch (Exception e) {
						mostrarMensajeErrorActualizar();
						return;
					          }
		    	  }
	      }
	      else{
	      
	    	  try {
	    		  Sistema.getIns().guardarAlumno(nuevo);
	  
	    	      } catch (Exception e) {
	    		  mostrarMensajeErrorGuardar();
	    		  return;
	    	            }
	        }
	      actualizarAlumnos();
        }



public void procesarEliminarAlumno(int leg){
    Alumno a = Sistema.getIns().buscarAlumno(leg);
    if(!comprobarAsociacionesAlumno(leg)) return;		
    Sistema.getIns().eliminarAlumno(a);
    actualizarAlumnos();
}

public void actualizarAlumnos(){
	vistaAdmin.actualizarAlumnos(Sistema.getIns().listarAlumnos());
	
}


//Profesores

public  void procesarSeleccionProfesor(int leg){
	Profesor p = Sistema.getIns().buscarProfesor(leg);
	int legajo = p.getNroLegajo();
	String nombre = p.getNombre();
	
	Direccion d = p.getDireccion();
	String calle = d.getCalle();
	int numero = d.getNumero();
	String codPostal = d.getCodPostal();
	String localidad = d.getLocalidad();
	int piso = d.getPiso();
	String dpto = d.getDepto();
	
	vistaAdmin.mostrarAtributosProfesor(legajo, nombre, calle, numero, codPostal, localidad, piso, dpto);
	
}

public void procesarAgregarProfesor(int leg, String nombre, String calle, int nro, String cp, String loc, int piso, String dpto){
           
          Direccion d = new Direccion (calle, nro, cp, loc, piso, dpto);	
	      Profesor nuevo = new Profesor(leg, nombre ); 
	      nuevo.setDireccion(d);
	      
	      if (Sistema.getIns().existeProfesor(leg)){
	    	  int sel = JOptionPane.showConfirmDialog(null, "El Profesor ya existe.\n Desea actualizarlo ?" , "Profesor Existente" , JOptionPane.OK_CANCEL_OPTION);
		    		if(sel != 0)
		    			return;  
		    		else
		    		{	
		    		 if(!comprobarAsociacionesProfesor(leg)) return;			
		    		try {
		    			
						Sistema.getIns().actualizarProfesor(nuevo);
						
					    } catch (Exception e) {
						mostrarMensajeErrorActualizar();
						return;
					          }
		    	  }
	      }
	      else{
	      
	    	  try {
	    		  Sistema.getIns().guardarProfesor(nuevo);
	  
	    	      } catch (Exception e) {
	    		  mostrarMensajeErrorGuardar();
	    		  return;
	    	            }
	        }
	      actualizarProfesores();
        }



public void procesarEliminarProfesor(int leg){
	
    Profesor p = Sistema.getIns().buscarProfesor(leg);
    if(!comprobarAsociacionesProfesor(leg)) return;	
    Sistema.getIns().eliminarProfesor(p);
    actualizarProfesores();
}

public void actualizarProfesores(){
	vistaAdmin.actualizarProfesores(Sistema.getIns().listarProfesores());
	
}

public void actualizar(){
	
	this.actualizarAlumnos();
	this.actualizarMaterias();
	this.actualizarProfesores();
	
}



// Check

public boolean comprobarAsociacionesMateria(String num){
	
	 if(Sistema.getIns().existeCursoConMateria(num)){
	    	JOptionPane.showMessageDialog(null, "Existe Curso para esta materia ", "ERROR", JOptionPane.ERROR_MESSAGE);
			return false;
	    }
	    if(Sistema.getIns().existeProfesorConMateria(num)){
	    	JOptionPane.showMessageDialog(null, "Existe Profesor para esta materia ", "ERROR", JOptionPane.ERROR_MESSAGE);
			return false;
	    }
	    return true;
}

public boolean comprobarAsociacionesProfesor(int leg){
	
	if(Sistema.getIns().existeCursoConProfesor(leg)){
    	JOptionPane.showMessageDialog(null, "Existe Curso para este profesor ", "ERROR", JOptionPane.ERROR_MESSAGE);
		return false;
    }
	   return true;
	
}

public boolean comprobarAsociacionesAlumno(int leg){
	
	if(Sistema.getIns().existeCursoConAlumno(leg)){
    	JOptionPane.showMessageDialog(null, "Existe Curso para este alumno ", "ERROR", JOptionPane.ERROR_MESSAGE);
		return false;
    }
	   return true;
}




// Mensajes Error

private void mostrarMensajeErrorGuardar(){
	  JOptionPane.showMessageDialog(null, "No se pudo guardar", "ERROR", JOptionPane.ERROR_MESSAGE);
}

private void mostrarMensajeErrorActualizar(){
	JOptionPane.showMessageDialog(null, "No se pudo actualizar", "ERROR", JOptionPane.ERROR_MESSAGE);
}

}
